﻿#include "dlgcard.h"
#include "DlgSetup.h"
#include <QMessageBox>
#include <QDebug>
#include <qwt_plot_zoomer.h>
#include "ccard.h"

extern CCard *pcard;

DlgCard::DlgCard(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    card=pcard;
    addr=0x240;
    d_n=0;
    //        ui.qwtPlot->setAxisScale();
//    ui.qwtPlot->setAxisTitle(QwtPlot::xBottom, "Time/seconds");
//    ui.qwtPlot->setAxisScale(QwtPlot::xBottom, 0, 100);
//
//    ui.qwtPlot->setAxisTitle(QwtPlot::yLeft, "Volts");
//    ui.qwtPlot->setAxisScale(QwtPlot::yLeft, -5,5);
    ui.qwtPlot->axisAutoScale(QwtPlot::xBottom);
    ui.qwtPlot->axisAutoScale(QwtPlot::yLeft);
    d_zoomer = new QwtPlotZoomer( QwtPlot::xBottom, QwtPlot::yLeft,ui.qwtPlot->canvas());
    //
    ad=new Vstatus(ui.tableWidget_ad);
    QList<QString> vdata;
    for(int i=0;i<16;i++)
    {
        QString s;
        s.setNum(i);
        vdata<<s;
    }
    ad->setNstatus(vdata);
    mydo=new Hstatus(ui.tableWidget_do);
    mydo->setNstatus(vdata);
    //
    mytimeArr=0;
    for(int i=0;i<16;i++)
    {
       cLeft[i] = 0;
    }
}
DlgCard::~DlgCard()
{
    delete ad;
    delete mydo;
    if (mytimeArr!=0)
        delete []mytimeArr;
}

void DlgCard::on_menuFile_triggered(QAction* a)
{
    //    not use
}
void DlgCard::on_actionAutoScale_triggered()
{
ui.qwtPlot->axisAutoScale(QwtPlot::xBottom);
ui.qwtPlot->axisAutoScale(QwtPlot::yLeft);
ui.qwtPlot->replot();
}
void DlgCard::on_actionSetup_triggered()
{
    DlgSetup d;
    d.exec();
    if (d.Accepted)
    {
    QString str=d.ui.comboBox->currentText();
    //   QMessageBox msgBox;
    //   msgBox.setText(str);
    //   msgBox.exec();
    bool ok;
    str=str.left(str.size()-1);
    addr= str.toLong(&ok, 16);
    //   QString n;
    //   n.setNum(addr);
    //      QMessageBox msgBox;
    //      msgBox.setText(n);
    //      msgBox.exec();
}
}
void DlgCard::on_actionExit_triggered()
{
    close();
}

void DlgCard::start()
{
    //d_zoomer->reset();
    mytimeArr=new double[PLOT_SIZE];
    for(int i=0;i<16;i++)
    {
        if (ad->getStatus(i))
        {
            if (cLeft[i]==0)
            {
                cLeft[i] = new QwtPlotCurve("Data Moving Left");
                cLeft[i]->attach(ui.qwtPlot);
            }
            else
            {
                cLeft[i]->attach(ui.qwtPlot);
            }
            chanelV[i].setData(PLOT_SIZE);
        }
        else
        {
            if (cLeft[i]!=0)
            {
                cLeft[i]->detach();
            }

        }
    }
    //
    d_interval = qRound(0.0);//1000ms

    if ( d_timerId >= 0 )
    {
        killTimer(d_timerId);
        d_timerId = -1;
    }
    if (d_interval >= 0 )
        d_timerId = startTimer(d_interval);
    qDebug() << "Timer ID:" << d_timerId;

}
void DlgCard::timerEvent(QTimerEvent *)
{
    mytimeArr[d_n]=d_n;
    for(int i=0;i<16;i++)
    {
        if (ad->getStatus(i))
        {
            double v=card->getchanelVolt(i);//¾»»¯Â¯ÎÂ¶È
            chanelV[i].volt[d_n]=v;
            //cLeft[i]->setRawData(mytimeArr, chanelV[i].volt, d_n+1);
        }
    }

    d_n+=1;
    qDebug() << "Timer event: d_n"<<d_n;
    if (d_n==PLOT_SIZE) d_n=0;

    ui.qwtPlot->replot();
}
void DlgCard::stop()
{
    if ( d_timerId >= 0 )
    {
        killTimer(d_timerId);
        d_timerId = -1;
    }
    d_n=0;
}
void DlgCard::pause()
{
    if ( d_timerId >= 0 )
    {
        killTimer(d_timerId);
        d_timerId = -1;
    }
//    QwtPlotCurve *cSin = new QwtPlotCurve("y = sin(x)");
//    cSin->setRenderHint(QwtPlotItem::RenderAntialiased);
//    cSin->setPen(QPen(Qt::red));
//    cSin->attach(ui.qwtPlot);
//    double x[100];
//    double y[100];
//    for(int i=0;i<100;i++)
//    {
//        x[i]=i;y[i]=i;
//    }
//    cSin->setRawData(x, y,100);
//    ui.qwtPlot->replot();
}
void DlgCard::gainChange()
{}
void DlgCard::doClick(int row,int col)
{
    mydo->rowClick(col);
    bool b=mydo->getStatus(col);
    card->dout(col,b);
}
void DlgCard::daClick()
{}
void DlgCard::chanelClick(int row,int col)
{
    ad->rowClick(row);
}
